iT邦幫忙

2021 iThome 鐵人賽

DAY 10
0

傳值與傳址

先來看案例

案例一

let a = 50;
let b = a;
console.log (a); // 顯示為 50
console.log(b); // 顯示為 50

b = 999;
console.log(a);  // 顯示為 50
console.log(b);  // 顯示為 999
a === b;

  • 當 b 重新賦予值為 999 時, a 的資料值一樣為 50,彼此的資料與記憶體位址是獨立的
  • 最後 a === b 為 false

案例二

 let data1 = { value : 99 };
 let data2 = data1;
 console.log(data1);  // 顯示為 { value : 99 }
 console.log(data2); // 顯示為 { value : 99 }
 
 data1.value = 999;
 console.log(data1);  // 顯示為 { value : 999 }
 console.log(data2);  // 顯示為 { value : 999 }
  • 在 data1.value 更新為 999 時,data2 的內容也一併變動
  • 是因為在 data2 = data1 時,指向的是同樣的記憶體位址

傳值?還是傳址?

  • 傳值(pass by value):在基本型別中(string、number、boolean、null、undefined、Symbol),其變數的更新是以傳值的方式,也就是在複製變數時,更新的是變數中的『值』。
  • 傳址(pass by reference):除了基本型別以外的都算物件型別(Object、Array、function),以指向記憶體位址進行傳遞。

參考與學習資源

  • 0 陷阱!0 誤解!8 天重新認識 JavaScript!
  • JavaScript 指南
  • 六角學院 - JavaScript 必修篇 - 前端修練全攻略

本日小節

傳值傳扯有時的還真的會不小心搞錯,後面在處理物件的時候還會有資料處理上的誤區(?)
嘸蝦米下意議一直打傳址我到底在幹麻…XD
這是我的學習紀錄,歡迎各路大神的指點指教,我們下次見!


上一篇
[ Day 9 ] - 函式
下一篇
[ Day 11 ] - DOM
系列文
初心者解任務啦!JS 的 30 道任務30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言